package com.xyhy.core.file.utils;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import org.apache.commons.lang3.StringUtils;
import com.xyhy.core.base.Strings;
import com.xyhy.core.utils.id.IdUtil;
import com.xyhy.core.utils.time.LocalDateUtil;

import java.io.File;
import java.time.LocalDate;
import java.util.Optional;

public class OssUtil {

  public static String getPath(String pathParent) {
    String pathPrefix = Optional.ofNullable(pathParent).filter(x -> StringUtils.isNotBlank(x)) //
            .map(x -> x.endsWith(Strings.SLASH) ? x : x + Strings.SLASH).orElse("media/");
    return pathPrefix + LocalDateUtil.formatLocalDate(LocalDate.now(), "yyyyMMdd");
  }

  public static String getNewFileName(File file) {
    return getNewFileName(FileUtil.getSuffix(file), null);
  }

  public static String getNewFileName(String suffix) {
    return getNewFileName(suffix, null);
  }

  public static String getNewFileName(String suffix, Long fileId) {
    return StrUtil.join(Strings.EMPTY, Optional.ofNullable(fileId).orElse(IdUtil.getId()), Strings.DOT, suffix);
  }

  public static String getObjectName(String pathParent, File file) {
    return getObjectName(pathParent, FileUtil.getSuffix(file));
  }

  public static String getObjectName(String pathParent, File file, Long fileId) {
    return getObjectName(pathParent, FileUtil.getSuffix(file), fileId);
  }

  public static String getObjectName(String pathParent, String suffix) {
    return StrUtil.join(Strings.EMPTY, getPath(pathParent), Strings.SLASH, getNewFileName(suffix, null));
  }

  public static String getObjectName(String pathParent, String suffix, Long fileId) {
    return StrUtil.join(Strings.EMPTY, getPath(pathParent), Strings.SLASH, getNewFileName(suffix, fileId));
  }

//  public static String getObjectName(MediaFile mediaFile) {
//    return StrUtil.join(Strings.SLASH, mediaFile.getPath(), mediaFile.getName());
//  }
//
//  public static String getFrameObjectName(MediaFile mediaFile, String frameName) {
//    return StrUtil.join(Strings.SLASH, mediaFile.getPath(), OssConstants.FOLDER.FRAMES, frameName);
//  }
//
//  public static void fillDefaultOriginalFields(MediaFile mediaFile) {
//    mediaFile.setOriginalName(getOriginalName(mediaFile.getName()));
//    mediaFile.setOriginalPath(mediaFile.getPath());
//  }
//
//  /**
//   * 获取原始上传文件名称
//   */
//  public static String getOriginalObjectName(MediaFile mediaFile) {
//    if (StrUtil.isNotBlank(mediaFile.getOriginalName())) {
//      return Optional.ofNullable(mediaFile.getOriginalPath()).filter(x -> StrUtil.isNotBlank(x)).map(x -> StrUtil
//      .join(Strings.SLASH, x, mediaFile.getOriginalName())).orElse(mediaFile.getOriginalName());
//    }
//    return StrUtil.join(Strings.SLASH, mediaFile.getPath(), getOriginalName(mediaFile.getName()));
//  }
//
//  /* 优先获取原始文件名 */
//  public static String getObjectNameOriginalFirst(MediaFile mediaFile) {
//    boolean isNotCleaned = BooleanUtils.isNotTrue(mediaFile.getOriginalCleaned());
//    if (isNotCleaned && StrUtil.isAllNotBlank(mediaFile.getOriginalName(), mediaFile.getOriginalPath())) {
//      return StrUtil.join(Strings.SLASH, mediaFile.getOriginalPath(), mediaFile.getOriginalName());
//    } else {
//      return getObjectName(mediaFile);
//    }
//  }

  public static String getOriginalName(String name) {
    return String.format("%d.%s", IdUtil.getId(), FileUtil.getSuffix(name));
  }

  public static String getUrl(String bucket, String endpoint, String objectName) {
    return String.format("https://%s.%s/%s", bucket, endpoint, objectName);
  }


}
